﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using _10_HPBar.GameFrame;
using _10_HPBar.GameFrame.Interface;
using _10_HPBar.GameFrame.System;
using _10_HPBar.Scene.Manager;
using _10_HPBar.Tool;

namespace _10_HPBar.Scene
{
    internal class SceneMenu : IScene
    {
        public string Name => "SceneMenu";

        MenuSystem menu;

        event Action action;

        public SceneMenu()
        {
            // todo Dictionary Lambda
            // Lambda表达式 匿名方法
            // 将方法当作参数传递一般使用委托
            // 但委托绑定方法要频繁取名写方法 太麻烦
            // 参数列表中的参数类型与数量要与委托一致
            // 没有参数 () 也不能省略
            // (参数列表) => 表达式
            // (参数列表) => { 语句; }

            // 特殊的委托
            // Action 无返回值 参数使用泛型
            // Func 有返回值 返回值类型为泛型最后一个

            // 键值对 Key Value Pair
            // Dictionary 字典
            List<MenuSystem.MenuData> menuData = new ();

            menuData.Add(new(" 新游戏 ", () =>  Game.scene.ChangeSceneByName("SceneMain")));
            menuData.Add(new("读取存档", () => Utility.MyPrint("2", 2, 12)));
            menuData.Add(new("设置", () => Utility.MyPrint("3", 2, 12)));
            menuData.Add(new("退出", () => Utility.MyPrint("4", 2, 12)));

            menu = new MenuSystem(menuData, 10, 4);
            
            EventSystem.Instance.AddEvent("更改选项名称", () => menu.ChangeSelectionName(0, "重新开始"));

            //AddAction((bba) => 
            //{
            //    bba = "111"; return 1; 
            //});
        }

        //void AddAction(Func<string,int> action)
        //{
        //    action.Invoke("11");
        //}

        
        public void End()
        {

        }

        public void Init()
        {

        }

        public void Input()
        {
            if (Game.input.IsKeyPressed(ConsoleKey.W))
            {
                menu.UpRoll();
            }
            if (Game.input.IsKeyPressed(ConsoleKey.S))
            {
                menu.DownRoll();
            }
            if (Game.input.IsKeyPressed(ConsoleKey.Enter))
            {
                menu.Confirm();
            }
        }

        public void Render()
        {
            menu.Render();
        }

        public void Update()
        {

        }
        public void FixedUpdate()
        {

        }
    }
}
